home *** CD-ROM | disk | FTP | other *** search
- *///////*///////*///////*///////*///////*///////*///////
- * 激速PICローダー FPIC.r by 幽玄 1995
- *///////*///////*///////*///////*///////*///////*///////
- include IOCSCALL.mac
- include DOSCALL.mac
- include SYS_FPIC.mac
-
- request SYS_FPIC.o * Makeは使わない人なので。
- * これをSYS_SPIC.o にすれば小型版。
- .xref _Fpic_load
- .xref _Fpic_keep
- .xref _Fpic_disp
- .xref _Fpic_free
- .xref _Fpic_set_buf
-
- .text
- *///////////////////////////////////////////////*
- * 余分なメモリをお返しする *
- *///////////////////////////////////////////////*
- * MEM_OPT *
- *///////////////////////////////////////////////*
- MEM_OPT .macro stk_size
- .local MO_00
-
- lea $10(a0),a0
- adda.l #stk_size,a1
- sub.l a0,a1
- movem.l a0/a1,-(sp)
- DOS _SETBLOCK
- addq.w #8,sp
- add.l a0,a1
- lea -$10(a0),a0
- tst.l d0
- bmi MO_00
- lea (a1),sp
- MO_00:
- .endm
-
- *///////*///////*///////*///////*///////*///////*///////
-
- entry: MEM_OPT 2048
- bmi ML_err
-
- tst.b (a2)+
- beq usage
-
- suba.l a1,a1
- IOCS _B_SUPER
- move.l d0,-(sp)
-
- IOCS _OS_CUROF
-
- FP_KEEP (a2) *データをメモリに読み込む
- cmp.w #-1,d0
- beq FN_err
- cmp.w #-2,d0
- beq DF_err
- cmp.w #-3,d0
- beq ML_err
- move.l d0,a0
-
- lea _512x512_64K_H(pc),a1
- btst.b #fpf_SQ,fpw_FLAG1(a0) *スクエアモード?
- beq 1f
- lea _768x512_64K_H(pc),a1
-
- 1: pea (a1)
- bsr _set_CRT
- addq.w #4,sp
-
- moveq.l #0,d0
- moveq.l #0,d1
- btst.b #fpf_XY,fpw_FLAG1(a0) *座標指定はあるか?
- beq 1f
- move.w fpw_X(a0),d0 *┐座標指定が無くても、
- move.w fpw_Y(a0),d1 *┘(0,0)が入ってるんだけどね。
-
- 1: FP_DISP a0,d0,d1 *データを表示する
-
- FP_FREE a0 *解放
-
- IOCS _OS_CURON
- movea.l (sp)+,a1
- IOCS _B_SUPER
- DOS _EXIT
-
- ML_err: pea ML_err_pr(pc)
- bra exit
-
- FN_err: pea FN_err_pr(pc)
- bra exit
-
- DF_err: pea DF_err_pr(pc)
- bra exit
-
- usage: pea usage_pr(pc)
- exit: DOS _PRINT
- addq.w #4,sp
- pea -1.w
- DOS _EXIT2
-
- ML_err_pr: dc.b 'メモリが足りません.',$0d,$0a,0
- FN_err_pr: dc.b 'ファイルが読めません.',$0d,$0a,0
- DF_err_pr: dc.b '未対応フォーマットです.',$0d,$0a,0
- usage_pr: dc.b '[ FPIC.r ver 1.7 ] by 鳳幽玄 1995',$0d,$0a
- dc.b 'usage : FPIC FileName',$0d,$0a
- dc.b 0
- .even
-
-
-
-
- * 画面モード設定:暫定版
-
-
- _768x512_64K_H: dc.w 137,14,28,124,567,5,40,552,%011_000_10110
- _512x512_64K_H: dc.w 91,9,17,81,567,5,40,552,%011_000_10101
-
- * 0 1 2 3 4 5 6 7 8 9 A B C D E F
- CRTM_prw: dc.b 4,2,9,9,9,2,9,9,9,9,9,9,9,9,9,9 *0
- dc.b 3,1,9,9,9,1,0,9,9,9,9,9,9,9,9,9 *1
-
- .offset 0
- CRTCD_R0: ds.w 1
- CRTCD_R1: ds.w 1
- CRTCD_R2: ds.w 1
- CRTCD_R3: ds.w 1
- CRTCD_R4: ds.w 1
- CRTCD_R5: ds.w 1
- CRTCD_R6: ds.w 1
- CRTCD_R7: ds.w 1
- CRTCD_R20: ds.w 1
- .text
-
- _set_CRT: movem.l d0-d1/a0-a1,-(sp)
- movea.l 4*5(sp),a0
-
- move.b CRTCD_R20+1(a0),d0
- andi.w #%000_11111,d0
- move.b CRTM_prw(pc,d0.w),d0
-
- move.w $e80028,d1
- andi.w #%000_11111,d1
- cmp.b CRTM_prw(pc,d1.w),d0
-
- bls set_CRT_low_hi
- bra set_CRT_hi_low
-
- 9: moveq.l #128-1,d0
- lea $e82000,a0
- moveq.l #0,d1
- move.l #$0001_0001,d1
- move.l #$0202_0202,d2
- 1: move.l d1,(a0)+
- add.l d2,d1
- dbra d0,1b
-
- clr.l $e80018
- clr.l $e80018+4
- clr.l $e80018+8
- clr.l $e80018+12
- movem.l (sp)+,d0-d1/a0-a1
- rts
-
- set_CRT_hi_low: lea $e80002,a1 *高から低へ
- move.w CRTCD_R20(a0),d0 *
- move.w d0,$e80028 *R20
- move.w (a0)+,d1 *
- move.w (a0)+,(a1)+ *R1
- move.w (a0)+,(a1)+ *R2
- move.w (a0)+,(a1)+ *R3
- move.w (a0)+,(a1)+ *R4
- move.w (a0)+,(a1)+ *R5
- move.w (a0)+,(a1)+ *R6
- move.w (a0)+,(a1)+ *R7
- move.w d1,$e80000 *R0
- lsr.w #8,d0 *
- move.w d0,$e82400 *V.C R1
- move.w #%0010_1111,$e82600 *V.C R3
- bra 9b
-
- set_CRT_low_hi: lea $e80000,a1 *低から高へ
- move.w (a0)+,(a1)+ *R0
- move.w (a0)+,(a1)+ *R1
- move.w (a0)+,(a1)+ *R2
- move.w (a0)+,(a1)+ *R3
- move.w (a0)+,(a1)+ *R4
- move.w (a0)+,(a1)+ *R5
- move.w (a0)+,(a1)+ *R6
- move.w (a0)+,(a1)+ *R7
- move.w (a0)+,d0 *
- move.w d0,$e80028 *R20
- lsr.w #8,d0 *
- move.w d0,$e82400 *V.C R1
- move.w #%0010_1111,$e82600 *V.C R3
- bra 9b